/*
7-5 模拟EXCEL排序（14 分）提问
	Excel可以对一组纪录按任意指定列排序。现请编写程序实现类似功能。

	输入格式:
	输入的第一行包含两个正整数N(≤10	​5​ ) 和C，其中N是纪录的条数，C是指定排序的列号。之后有 N行，每行包含一条学生纪录。每条学生纪录由学号（6位数字，保证没有重复的学号）、姓名（不超过8位且不包含空格的字符串）、成绩（[0, 100]内的整数）组成，相邻属性用1个空格隔开。

	输出格式:
	在N行中输出按要求排序后的结果，即：当C=1时，按学号递增排序；当C=2时，按姓名的非递减字典序排序；当C=3时，按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时，则按他们的学号递增排序。

	输入样例:
	3 1
	000007 James 85
	000010 Amy 90
	000001 Zoe 60
	输出样例:
	000001 Zoe 60
	000007 James 85
	000010 Amy 90
*/

#include <iostream>
#include <string.h>
#include <string>
using namespace std;
struct Info
{
	int id;
	string name;
	int grade;
};
//根据id
int myCompare_1(const void*elem1, const void*elem2)
{
	return (*(Info*)elem1).id - (*(Info*)elem2).id;
}

//根据name
int myCompare_2(const void*elem1, const void*elem2)
{
	if((*(Info*)elem1).name == (*(Info*)elem2).name)
		return (*(Info*)elem1).id - (*(Info*)elem2).id;
	else if((*(Info*)elem1).name > (*(Info*)elem2).name)
		return 1;
	else
		return -1;
}

//根据grade
int myCompare_3(const void*elem1, const void*elem2)
{
	if((*(Info*)elem1).grade == (*(Info*)elem2).grade)
		return (*(Info*)elem1).id - (*(Info*)elem2).id;
	else
		return (*(Info*)elem1).grade - (*(Info*)elem2).grade;
}

int main()
{
	int n, c, i;
	scanf("%d%d", &n, &c);
	Info *infos = new Info[n];
	for(i = 0; i < n; i++)
	{
		scanf("%d", &infos[i].id);
		cin >> infos[i].name;
		scanf("%d", &infos[i].grade);
	}
	if(c == 1)
		qsort(infos, n, sizeof(infos[0]), myCompare_1);
	else if(c == 2)
		qsort(infos, n, sizeof(infos[0]), myCompare_2);
	else if(c == 3)
		qsort(infos, n, sizeof(infos[0]), myCompare_3);
	for(i = 0; i < n; i++)
	{
		printf("%06d ", infos[i].id);
		cout << infos[i].name;
		printf(" %d\n", infos[i].grade);
	}
	return 0;
}